package bd;

import java.sql.*;

/** Classe pExCo, encarregada da criação do painel de exibição de comercial
 *
 */
public class pExCo extends javax.swing.JPanel {

    private String condicoes;
    private conecta bd;
    private frame principal;
    private ResultSet retorno;
    private boolean atualizacao;
    private String novaLinha;
    private painelTabelas painel;

    /** construtor da classe pExCo, encarregado de dar forma ao painel,
     * fazer a ligação com o banco de dados e com a janela principal
     */
    public pExCo(conecta bd, frame principal, painelTabelas painel) {
        initComponents();
        this.bd = bd;
        this.principal = principal;
        this.cancelaExCo.setVisible(false);
        this.painel = painel;
    }

    /** Método initComponents(). tem a função da criação da janela de exibição do comercial,
     * criando botões, caixas de texto, etc. É o método que dá forma à janela.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        buscaExCo = new javax.swing.JButton();
        insereExCo = new javax.swing.JButton();
        atualizaExCo = new javax.swing.JButton();
        removeExCo = new javax.swing.JButton();
        cancelaExCo = new javax.swing.JButton();
        jLabel42 = new javax.swing.JLabel();
        jLabel43 = new javax.swing.JLabel();
        jLabel44 = new javax.swing.JLabel();
        jLabel45 = new javax.swing.JLabel();
        jLabel46 = new javax.swing.JLabel();
        jLabel47 = new javax.swing.JLabel();
        jLabel48 = new javax.swing.JLabel();
        idPrEXCO = new javax.swing.JTextField();
        dataExEXCO = new javax.swing.JTextField();
        horaInicExEXCO = new javax.swing.JTextField();
        horaFimExEXCO = new javax.swing.JTextField();
        precoEXCO = new javax.swing.JTextField();
        cnpjClEXCO = new javax.swing.JTextField();

        buscaExCo.setText("Buscar");
        buscaExCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buscaExCoActionPerformed(evt);
            }
        });

        insereExCo.setText("Inserir");
        insereExCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                insereExCoActionPerformed(evt);
            }
        });

        atualizaExCo.setText("Atualizar");
        atualizaExCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                atualizaExCoActionPerformed(evt);
            }
        });

        removeExCo.setText("Remover");
        removeExCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                removeExCoActionPerformed(evt);
            }
        });

        cancelaExCo.setText("Cancelar");
        cancelaExCo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelaExCoActionPerformed(evt);
            }
        });

        jLabel42.setText("ID da Produção:");

        jLabel43.setText("Entre com os dados:");

        jLabel44.setText("Data de Exibição:");

        jLabel45.setText("Horário de Início:");

        jLabel46.setText("Horário de Término:");

        jLabel47.setText("Preço de Exibição:");

        jLabel48.setText("CNPJ do Cliente:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 489, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(47, 47, 47)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(buscaExCo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(insereExCo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(atualizaExCo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(removeExCo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(cancelaExCo)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 2, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(jLabel47, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel42)
                                    .addComponent(jLabel48)
                                    .addComponent(jLabel46)
                                    .addComponent(jLabel45)
                                    .addComponent(jLabel44))
                                .addGap(53, 53, 53)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(cnpjClEXCO)
                                    .addComponent(dataExEXCO)
                                    .addComponent(horaInicExEXCO)
                                    .addComponent(horaFimExEXCO)
                                    .addComponent(precoEXCO, javax.swing.GroupLayout.DEFAULT_SIZE, 224, Short.MAX_VALUE)
                                    .addComponent(idPrEXCO)))
                            .addComponent(jLabel43, javax.swing.GroupLayout.Alignment.LEADING)))
                    .addContainerGap(47, Short.MAX_VALUE)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 317, Short.MAX_VALUE)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel43)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel42)
                        .addComponent(idPrEXCO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel48)
                        .addComponent(cnpjClEXCO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel44)
                        .addComponent(dataExEXCO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGap(12, 12, 12)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel45)
                        .addComponent(horaInicExEXCO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel46)
                        .addComponent(horaFimExEXCO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel47)
                        .addComponent(precoEXCO, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 86, Short.MAX_VALUE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(buscaExCo)
                        .addComponent(insereExCo)
                        .addComponent(atualizaExCo)
                        .addComponent(removeExCo)
                        .addComponent(cancelaExCo))
                    .addContainerGap()))
        );
    }// </editor-fold>//GEN-END:initComponents

    /** Trata eventos relacionados ao botão buscar.
     * Realiza a busca de acordo com determinado texto digitado, retornando
     * o resultado da pesquisa. Também trata erro.
     */
    private void buscaExCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buscaExCoActionPerformed
        lerExCo();
        try {
            System.out.println(condicoes);
            retorno = bd.consulta("SELECT * FROM exibicaoComercial " + condicoes);
            this.principal.mostraBusca(retorno);
        } catch (SQLException ex) {
            bd.trataErro(ex);
        }
        limpaTela();
    }//GEN-LAST:event_buscaExCoActionPerformed

    /** Trata eventos relacionados ao botão insere.
     * Faz a inserção no banco de dados dos valores digitados no painel.
     */
    private void insereExCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_insereExCoActionPerformed
        bd.insercao("INSERT INTO exibicaoComercial(idPr, dataExCo, horaInicioExCo, precoExCo, cnpjCl)"
                + "VALUES (" + idPrEXCO.getText() + ", TO_DATE('" + dataExEXCO.getText() + "','DD.MM.YYYY'),"
                + " '" + horaFimExEXCO.getText() + "', " + precoEXCO.getText() + ", " + cnpjClEXCO.getText() + ")");
        limpaTela();
    }//GEN-LAST:event_insereExCoActionPerformed

    /** Trata eventos relacionados ao botão atualiza. Quando o botão é pressionado,
     * é enviada uma mensagem de instruções para acontecer a atualização.
     * Recebe os dados digitados e atualiza no banco.
     */
    private void atualizaExCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_atualizaExCoActionPerformed
        if (atualizacao == false) {
            lerExCo();//fazer o teste para ver quantoas linhas irá atualizar
            jLabel43.setText("Entre com os novos dados e aperte atualizar novamente");
            mudaVisualizacaoExCo();
            limpaTela();
        } else if (atualizacao == true) {
            novaLinha = "SET";
            if (idPrEXCO.getText() != null && !idPrEXCO.getText().trim().equals("")) {
                condicoes = condicoes + " idPr = " + idPrEXCO.getText() + ", ";
            }
            if (dataExEXCO.getText() != null && !dataExEXCO.getText().trim().equals("")) {
                condicoes = condicoes + " dataExCo = TO_DATE('" + dataExEXCO.getText() + "', 'DD.MM.YYYY'), ";
            }
            if (horaInicExEXCO.getText() != null && !horaInicExEXCO.getText().trim().equals("")) {
                condicoes = condicoes + " horaInicioExCo LIKE '" + horaInicExEXCO.getText() + "', ";
            }
            if (horaFimExEXCO.getText() != null && !horaFimExEXCO.getText().trim().equals("")) {
                condicoes = condicoes + " horaFimExCo LIKE '" + horaFimExEXCO.getText() + "', ";
            }
            if (precoEXCO.getText() != null && !precoEXCO.getText().trim().equals("")) {
                condicoes = condicoes + " precoExCo = " + precoEXCO.getText() + ", ";
//                try {
//                    ResultSet temp = bd.consulta("SELECT preçoPorSegundo "
//                            + "FROM valorComercial "
//                            + "WHERE valorComercial. dia = diaDasemana "
//                            + "AND valoComercial.horadeinicio < horainiciodada "
//                            + "AND valorComercial.horaFim > horainiciodada");
//                    long preco = Long.parseLong(temp.getString(1));
//                    condicoes = condicoes + " precoExCo = " + preco + ", ";
////                a data q ele passa tu extrai o dia da semana TO_NUMBER(TO_CHAR(dataexco,'D'))
//                    //                pras 14-16-18 tu faz horariovalorcomercial > horariodocara AND horariodocara<horariovalorcomercial + 2
//                    //                pras 14-16-18 tu faz horariovalorcomercial > horariodocara AND horariodocara<horariovalorcomercial + 2
//                } catch (SQLException ex) {
//                    condicoes = condicoes + " precoExCo = 0, ";
//                }
            }
            if (cnpjClEXCO.getText() != null && !cnpjClEXCO.getText().trim().equals("")) {
                condicoes = condicoes + " cnpjCl = " + cnpjClEXCO.getText() + ", ";
            }
            novaLinha = novaLinha.substring(0, novaLinha.length() - 2);
            bd.atualiza("UPDATE exibicaoComercial " + novaLinha + " " + condicoes);
            jLabel43.setText("Entre com os dados:");
            mudaVisualizacaoExCo();
            condicoes = null;
            novaLinha = null;
            limpaTela();
        }
    }//GEN-LAST:event_atualizaExCoActionPerformed

    /** Trata eventos relacionados ao botão remove.
     * Remove determinada tupla selecionada. trata erros
     */
    private void removeExCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeExCoActionPerformed
        novaLinha = "exibicaoComercial";//novaLinha esta sendo usada para parametrizar a exclusão pelo outro painel
        lerExCo();
        try {
            retorno = bd.consulta("SELECT * FROM " + novaLinha + " " + condicoes);
            this.painel.novaLinha = novaLinha;
            this.painel.condicoes = condicoes;
        } catch (SQLException ex) {
            System.out.println("Erro " + ex);
        }
        this.principal.BuscaParaRemover(retorno);
        limpaTela();
    }//GEN-LAST:event_removeExCoActionPerformed

    /** Trata eventos relacionados ao botão cancelar.
     * Ajusta o label da janela, volta pra janela principal e limpa os campos
     */
    private void cancelaExCoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelaExCoActionPerformed
        jLabel43.setText("Entre com os dados:");
        mudaVisualizacaoExCo();
        condicoes = null;
        novaLinha = null;
        limpaTela();
    }//GEN-LAST:event_cancelaExCoActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton atualizaExCo;
    private javax.swing.JButton buscaExCo;
    private javax.swing.JButton cancelaExCo;
    private javax.swing.JTextField cnpjClEXCO;
    private javax.swing.JTextField dataExEXCO;
    private javax.swing.JTextField horaFimExEXCO;
    private javax.swing.JTextField horaInicExEXCO;
    private javax.swing.JTextField idPrEXCO;
    private javax.swing.JButton insereExCo;
    private javax.swing.JLabel jLabel42;
    private javax.swing.JLabel jLabel43;
    private javax.swing.JLabel jLabel44;
    private javax.swing.JLabel jLabel45;
    private javax.swing.JLabel jLabel46;
    private javax.swing.JLabel jLabel47;
    private javax.swing.JLabel jLabel48;
    private javax.swing.JTextField precoEXCO;
    private javax.swing.JButton removeExCo;
    // End of variables declaration//GEN-END:variables

    /** Lê valores digitados, usando-os para fazer a condição do select
     */
    private void lerExCo() {
        condicoes = "WHERE";
        if (idPrEXCO.getText() != null && !idPrEXCO.getText().trim().equals("")) {
            condicoes = condicoes + " idPr = " + idPrEXCO.getText() + " AND ";
        }
        if (dataExEXCO.getText() != null && !dataExEXCO.getText().trim().equals("")) {
            condicoes = condicoes + " dataExCo = TO_DATE('" + dataExEXCO.getText() + "', 'DD.MM.YYYY') AND ";
        }
        if (horaInicExEXCO.getText() != null && !horaInicExEXCO.getText().trim().equals("")) {
            condicoes = condicoes + " horaInicioExCo LIKE '" + horaInicExEXCO.getText() + "' AND ";
        }
        if (horaFimExEXCO.getText() != null && !horaFimExEXCO.getText().trim().equals("")) {
            condicoes = condicoes + " horaFimExCo LIKE '" + horaFimExEXCO.getText() + "' AND ";
        }
        if (precoEXCO.getText() != null && !precoEXCO.getText().trim().equals("")) {
            condicoes = condicoes + " precoExCo = " + precoEXCO.getText() + " AND ";
        }
        if (cnpjClEXCO.getText() != null && !cnpjClEXCO.getText().trim().equals("")) {
            condicoes = condicoes + " cnpjCl = " + cnpjClEXCO.getText() + " AND ";
        }
        condicoes = condicoes.substring(0, condicoes.length() - 5);
    }

    /** limpa os campos.
     */
    private void limpaTela() {
        cnpjClEXCO.setText(null);
        dataExEXCO.setText(null);
        dataExEXCO.setText(null);
        horaFimExEXCO.setText(null);
        horaInicExEXCO.setText(null);
        idPrEXCO.setText(null);
        precoEXCO.setText(null);
    }

    /** Método que muda a visualização da janela de exibicao do comercial
     */
    private void mudaVisualizacaoExCo() {
        cancelaExCo.setVisible(!atualizacao);
        painel.abaEdicaoTabelas.setEnabled(atualizacao);
        painel.painelPrincipal.setEnabled(atualizacao);
        buscaExCo.setEnabled(atualizacao);
        insereExCo.setEnabled(atualizacao);
        removeExCo.setEnabled(atualizacao);
        atualizacao = !atualizacao;
    }
}